KillDbConnections <- function () {
all_cons <- dbListConnections(RPostgreSQL::PostgreSQL())
for(x in all_cons) + dbDisconnect(x)
}
ReadData <- function(table_name) {
# Initierung der Datenbank
con <- dbConnect(RPostgreSQL::PostgreSQL(),
host = 'hdm-sql.think-data.de',
dbname = 'postgres',
user = 'postgres',
password = 'Le9zGIn66GTJKGUc4Psv'
# Der richtige Weg, um auf sichere Weise das Passwort abzufragen
#password = rstudioapi::askForPassword("Database password")
)
# Ausführen der Query und Zurückgeben des Ergebnisses
return(dbReadTable(con, table_name))
# Verbindungsabbau
killDbConnections()
}
# Daten über die Funktion einlesen
wahl2017 <- ReadData("btwa2017_clean")
beschaeftigung <- ReadData("sti0102_gender-beschaeftigung")
mapping <- ReadData("mapping_wahlkreis_landkreis") OGR data source with driver: ESRI Shapefile
Source: "/Users/e86051/Google Drive/ProgrammingLanguagesforDataScience/Projektarbeit/FINALFINAL/btw17_geometrie_wahlkreise_vg250_geo_shp/Geometrie_Wahlkreise_19DBT_VG250_geo.shp", layer: "Geometrie_Wahlkreise_19DBT_VG250_geo"
with 299 features
It has 4 fields
Reading layer `Geometrie_Wahlkreise_19DBT_VG250_geo' from data source `/Users/e86051/Google Drive/ProgrammingLanguagesforDataScience/Projektarbeit/FINALFINAL/btw17_geometrie_wahlkreise_vg250_geo_shp/Geometrie_Wahlkreise_19DBT_VG250_geo.shp' using driver `ESRI Shapefile'
Simple feature collection with 299 features and 4 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 5.86625 ymin: 47.27012 xmax: 15.04182 ymax: 55.05838
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
beschaeftigung_formatted <- beschaeftigung %>% rename(LKR_NR = X) %>% mutate(LKR_NR = as.numeric(LKR_NR))
beschaeftigung2017_formatted <- filter(beschaeftigung_formatted, Year == 2017)
wahl2017_formatted <- wahl2017 %>% rename(WKR_NR = Nr) %>% mutate(WKR_NR = as.numeric(WKR_NR))
mapping_formatted <- mapping %>% mutate(WKR_NR = as.numeric(WKR_NR)) %>% mutate(LKR_NR = as.numeric(LKR_NR))
# Verbinden der geladenen Daten mit der Mapping Tabelle
beschaeftigung2017_mapped <- merge(x=beschaeftigung2017_formatted, y=mapping_formatted, by.x="LKR_NR", by.y="LKR_NR")
dataset2017 <- merge(x=beschaeftigung2017_mapped, y=wahl2017_formatted, by.x="WKR_NR", by.y="WKR_NR")# Ausgeben des Plots mit der Spalte "Wahlbeteiligung"
dataset2017_map <- merge(x=germany_map, y = dataset2017, by.x="WKR_NR", by.y="WKR_NR" )
plot(dataset2017_map['Wahlbeteiligung'])In der Darstellung zeigt sich deutlich, dass in weiten Teilen Ostdeutschlands, aber auch in Teilen des Ruhrgebiets, in Bremen und in Niederbayern die Wahlbeteiligung im Jahr 2017 unterhalb des Durchschnitts lag.
# Prozentuale Betrachtung
wahlsieger2017_proz <- dataset2017 %>% select(ends_with(".PZ"), WKR_NR, LKR_NR)
wahlsieger2017_proz$sieger <- colnames(wahlsieger2017_proz)[apply(select(dataset2017, ends_with(".PZ")),1,which.max)]
# Absolute Anzahl der Erststimmen
wahlsieger2017_abs1 <- dataset2017 %>% select(ends_with("1"), WKR_NR, LKR_NR)
wahlsieger2017_abs1$sieger <- colnames(wahlsieger2017_abs1)[apply(select(wahlsieger2017_abs1, ends_with("1")),1,which.max)]
wahlsieger2017_abs1$sieger <- sub("CDU1.CSU1", "CDU/CSU", wahlsieger2017_abs1$sieger)
wahlsieger2017_abs1$sieger <- sub("1$", "", wahlsieger2017_abs1$sieger)
wahlsieger2017_map <- merge(x=germany_map, y = wahlsieger2017_abs1, by.x="WKR_NR", by.y="WKR_NR" )
plot(wahlsieger2017_map['sieger'])Die Visualisierung zeigt die Parteizugehörigkeit der Wahlkreisgewinner, jedoch sind die Parteien nicht in den üblicherweise verwendeten Farben dargestellt. Dies soll in der nachfolgenden Abbildung korrigiert werden.
wahlsieger2017_map$farbe[wahlsieger2017_map$sieger == "CDU/CSU"] = "black"
wahlsieger2017_map$farbe[wahlsieger2017_map$sieger == "SPD"] = "red"
wahlsieger2017_map$farbe[wahlsieger2017_map$sieger == "AFD"] = "blue"
wahlsieger2017_map$farbe[wahlsieger2017_map$sieger == "LIN"] = "purple"
wahlsieger2017_map$farbe[wahlsieger2017_map$sieger == "GRÜ"] = "green"
plot(wahlsieger2017_map['sieger'], col = wahlsieger2017_map$farbe, main = "Wahlkreisgewinner 2017")In dieser Darstellung ist nun deutlich die dominante Position der CDU/CSU bei den Direktmandaten zu erkennen. Ebenfalls deutlich zu sehen: Erstmalig gewann die AFD drei Direktmandate im östlichen Sachsen.
dataset2017_map <- merge(x=germany_map, y = dataset2017, by.x="WKR_NR", by.y="WKR_NR" )
# Abrufen der Top10-Werte der Beschäftigungsquote
arrange(dataset2017_map, desc(Index.Beschäftigtenquote)) %>% select(Index.Beschäftigtenquote,Beschäftigtenquote.Männer.in..,Beschäftigtenquote.Frauen.in..)Simple feature collection with 463 features and 3 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 5.86625 ymin: 47.27012 xmax: 15.04182 ymax: 55.05838
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
First 10 features:
Index.Beschäftigtenquote Beschäftigtenquote.Männer.in..
1 108.5 56.3
2 106.9 58.1
3 105.0 61.4
4 104.9 57.3
5 104.6 59.6
6 104.6 64.5
7 104.3 60.9
8 104.3 56.1
9 104.2 56.7
10 104.0 57.5
Beschäftigtenquote.Frauen.in.. geometry
1 61.1 MULTIPOLYGON (((13.33416 54...
2 62.1 MULTIPOLYGON (((12.68141 54...
3 64.4 MULTIPOLYGON (((13.80057 53...
4 60.1 MULTIPOLYGON (((11.00045 53...
5 62.4 MULTIPOLYGON (((14.12669 52...
6 67.5 MULTIPOLYGON (((14.20158 51...
7 63.5 MULTIPOLYGON (((12.28626 52...
8 58.5 MULTIPOLYGON (((14.49628 52...
9 59.0 MULTIPOLYGON (((12.29934 54...
10 59.8 MULTIPOLYGON (((12.68141 54...
# Abrufen der schlechtesten 10 Werte der Beschäftigungsquote
arrange(dataset2017_map, Index.Beschäftigtenquote) %>% select(Index.Beschäftigtenquote,Beschäftigtenquote.Männer.in..,Beschäftigtenquote.Frauen.in..)Simple feature collection with 463 features and 3 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 5.86625 ymin: 47.27012 xmax: 15.04182 ymax: 55.05838
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
First 10 features:
Index.Beschäftigtenquote Beschäftigtenquote.Männer.in..
1 73.4 72.1
2 73.6 66.3
3 75.3 66.5
4 75.9 68.2
5 76.2 67.8
6 76.9 57.1
7 76.9 57.1
8 77.2 65.9
9 77.3 66.0
10 77.4 61.2
Beschäftigtenquote.Frauen.in.. geometry
1 52.9 MULTIPOLYGON (((7.583193 51...
2 48.8 MULTIPOLYGON (((10.22952 51...
3 50.1 MULTIPOLYGON (((8.353994 49...
4 51.8 MULTIPOLYGON (((7.658401 53...
5 51.7 MULTIPOLYGON (((8.488838 51...
6 43.9 MULTIPOLYGON (((6.818069 51...
7 43.9 MULTIPOLYGON (((6.818069 51...
8 50.8 MULTIPOLYGON (((7.700788 50...
9 51.1 MULTIPOLYGON (((8.309988 53...
10 47.3 MULTIPOLYGON (((7.353569 53...
# Ausgeben des Plots mit dem Inhalt der Spalte "Index.Beschäftigtenquote"
plot(dataset2017_map['Index.Beschäftigtenquote'], main = "Beschäftigungsquote von 2017", nbreaks = 8)Auch bei diesem Thema zeigt sich ein deutlicher Unterschied zwischen den östlichen und westlichen Bundesländern.
[1] "character"
# Augeben des Plots für die Spalte "Index.Beschäftigtenquote"
plot(dataset2017_map['Wahlbeteiligung'],
main = "Wahlbeteiligung im Jahr 2017",
breaks = "quantile", nbreaks = 7,
pal = pal)Hier noch ein weiteres Beispiel, wie die Wahlbeteiligung mit Farbverläufen auf Landkarten dargestellt werden kann.
Neben der Visualisierung von Dataframes durch “plot” können auch Spatial-Objekte durch das Paket “spplot” visualisiert werden.
OGR data source with driver: ESRI Shapefile
Source: "/Users/e86051/Google Drive/ProgrammingLanguagesforDataScience/Projektarbeit/FINALFINAL/btw17_geometrie_wahlkreise_vg250_geo_shp/Geometrie_Wahlkreise_19DBT_VG250_geo.shp", layer: "Geometrie_Wahlkreise_19DBT_VG250_geo"
with 299 features
It has 4 fields
OGR data source with driver: ESRI Shapefile
Source: "/Users/e86051/Google Drive/ProgrammingLanguagesforDataScience/Projektarbeit/FINALFINAL/btw17_geometrie_wahlkreise_vg250_geo_shp/Geometrie_Wahlkreise_19DBT_VG250_geo.shp", layer: "Geometrie_Wahlkreise_19DBT_VG250_geo"
with 299 features
It has 4 fields
x <- merge(Germany_shape, wahl2017_formatted, by.x = "WKR_NR", by.y = "WKR_NR", duplicateGeoms = TRUE)
pal <- brewer.pal(6, "RdYlGn")
# Umbrüche der Quantile
breaks_qt <- classIntervals(x$Wahlbeteiligung, n = 6, style = "quantile")
br <- breaks_qt$brks
offs <- 0.0000001
br[1] <- br[1] - offs
br[length(br)] <- br[length(br)] + offs
# Kategorien
x$Wahlbeteiligung_bracket <- cut(x$Wahlbeteiligung, br)
# Ausgeben der Grafik
spplot(x, "Wahlbeteiligung_bracket", main = "Wahlbeteiligung in 6 Quantile", col.regions=pal)Häufig wird bei der Visualisierung mit einer Einteilung von kontinuierlichen Werten in Gruppen gearbeitet, um Unterschiede besser herausarbeiten zu können. Im vorliegenden Beispiel wurde eine Untergliederung in sechs Quantile genutzt und farblich in die Landkarte eingebaut.